/**
 * @author: Gene
 * @age: 永远18岁的美少年
 * @Email： yangjianyun@58.com
 * @date: 2021-11-30 22:14:15
 * @description:  typescript 的基本类型
 */
var married = true;
var age = 0;
var first_name = "Gene";
var arr1 = [1, 2, 3];
var arr2 = [4, 5, 6];
// 元组类型 tuple元组: 表示 已知数量 和 类型的一个数组. 类型和数量固定,不能多写, 也不能少写
var AA = ['Gene', 2];
//  1.普通枚举类型
var GenderEnum;
(function (GenderEnum) {
    GenderEnum[GenderEnum["GIRL"] = 0] = "GIRL";
    GenderEnum[GenderEnum["BOY"] = 1] = "BOY";
})(GenderEnum || (GenderEnum = {}));
console.log(GenderEnum.GIRL);
var myColor = [0 /* RED */, 1 /* YELLOW */, 2 /* BLUE */];
// 3. 任意类型  any 类型  => 如果变量定义为 any类型, 那么久跟 js 差不多了, 不进行类型检查了.
// let element: (HTMLElement | null) = document.getElementById('root')
// 非空断言
// element!.style.color = "red"
//4. null 和 undefined 类型. 是其他类型的子类型
// 如果說 strictNullChecks 的值為 tru, 则不能把  null ,undefined 赋值给其他类型
var x;
x = 1;
x = undefined;
x = null;
// 5. never 类型 代表不会出现的值
// 5.1 作为不会返回的函数的返回值  类型
function error(message) {
    throw new Error("啊哦, 报错了呢"); // 直接异常结束了, 下面就不会执行了,也永远不会有返回值
    console.log("ok");
}
// 5.2 死循环, 函数是never类型
function loop() {
    while (true) {
    }
}
// 5.3 never 永远走不到的情景
function fn(x) {
    if (typeof x === "number") { // 肯定 number 类型保护
        console.log(x);
    }
    else if (typeof x === "string") { // 肯定 string 类型保护
        console.log(x);
    }
    else {
        console.log(x); // 这里就是 never了, 永远走不到
    }
}
// void 和 never 的区别
// void 代表没有任何类型, 如果一个函数,没有返回值, 那么就是 void 类型
// void 可以被赋值为 null 和 undefined,  但是never 是不能包含任何类型的.
// 如果一个函数,返回类型 为 void, 能正常执行, 但是返回 never 的函数, 无法正常执行
function greeting() {
    return undefined;
}
// Symbol 类型
var s1 = Symbol('key');
var s2 = Symbol('key');
// console.log(s1 === s2);
// BigInt 大数字类型, 如果要用这个类型, 在 tsconfig.json中 的lib中,也需要 ESNext 这个库
var max = Number.MAX_SAFE_INTEGER;
console.log(max + 1 === max + 2);
///  类型推导
var uname;
uname = 1;
var uname2 = "Gene"; // uname2 会自动推导成 string 类型
//  包装对象 wrapper object
// 原始类型  对象类型
/** -------------- 联合类型  ------------  */
// 联合类型,只能访问两个类型 共有的方法
var name3;
console.log(name3.toString());
/** -------------- 类型断言 --------------*/
var name4;
console.log(name4.toFixed());
console.log(name4.length);
// 双重断言
console.log(name4);
/** ======== 字面量类型  和 类型字面量 ============*/
// 1. 字面量类型: => 一个字面量, 即一个字符串,值 就是一个类型
var up = "Up";
var down = "Down";
var left = "Left";
var right = "Right";
var value = 1;
function go(direction) {
}
go("Left");
var p = {
    name: "Gene",
    age: 10
};
